From: Jonathan Daugherty Date: Wed, 20 Jul 2016 16:10:17 +0000 (-0700) Subject: arm/traps: fix bug in dump_guest_s1_walk handling of level 2 page tables X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~714 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22man:///%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22man:/?a=commitdiff_plain;h=a43cc8fc0827a4110b884b0fd94bf98628f27ab7;p=xen.git arm/traps: fix bug in dump_guest_s1_walk handling of level 2 page tables dump_guest_s1_walk intends to walk to level 2 page table entries but was failing to do so because of a check that caused level 2 page table descriptors to be ignored. This change fixes the check so that level 2 page table walks occur as intended by ignoring descriptors unless their low two bits match the expected sequence [0,1]. For more information, see the ARMv7-A ARM DDI 0406C.b, section B3.5.1. Signed-off-by: Jonathan Daugherty Reviewed-by: Julien Grall Acked-by: Stefano Stabellini --- diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index 0c10c4d123..dfb1949006 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -2350,7 +2350,7 @@ void dump_guest_s1_walk(struct domain *d, vaddr_t addr) printk("1ST[0x%"PRIx32"] (0x%"PRIpaddr") = 0x%08"PRIx32"\n", offset, pfn_to_paddr(mfn_x(mfn)), first[offset]); if ( !(first[offset] & 0x1) || - !(first[offset] & 0x2) ) + (first[offset] & 0x2) ) goto done; mfn = p2m_lookup(d, _gfn(paddr_to_pfn(first[offset])), NULL);